جاوا اسکریپت کمی شبیه مردان بی چهره دنیای برنامه نویسی است.
می تواند ناهمزمان(Asynchronous) باشد. این می تواند تابعی (Functional) باشد. این می تواند شی گرا (Object-oriented) باشد. این می تواند سمت مشتری (Client-side) باشد. این می تواند سمت سرور (Server-side) باشد. این لیست ادامه دارد.
این مقاله بر روی جاوا اسکریپت ناهمزمان تمرکز خواهد کرد.
این بدان معنی است که می توان همزمان فقط یک عملیات انجام داد. اما این کل تصویر اینجا نیست. جاوا اسکریپت به ما امکان می دهد تا مانند یک زبان ناهمزمان رفتار کند. یکی از آنها با بند Async-Await است.
Async-Await چیست؟
Async و Await تمدید Promise هستند. اگر با مفاهیم promise آشنا نیستید ، می توانید به مقاله نحوه نوشتن Promise در JavaScript مراجعه کنید.
Async
توابع Async ما را قادر می سازد تا کدهای مبتنی بر Promise را مانند اینکه همزمان باشد ، اما بدون مسدود کردن موضوع اجرا بنویسیم. از طریق حلقه رویداد بصورت همزمان انجام می شود. توابع Async همیشه مقداری را برمی گردانند. استفاده از async به سادگی نشان می دهد که یک promise مسترد می شود و اگر Promise مسترد نشود ، جاوا اسکریپت به طور خودکار آن را در یک Promise حل شده با ارزش خود قرار می دهد.
اجرای کد بالا خروجی هشدار 27 را نشان می دهد ، به این معنی است که Promise برگشت داده شده است ، در غیر این صورت روش .then() به سادگی امکان پذیر نیست.
Await
عملگر await برای انتظار یک promise استفاده می شود. فقط در داخل بلوک Async قابل استفاده است. کلمه کلیدی Await باعث می شود جاوا اسکریپت منتظر بماند تا زمانی که Promise نتیجه بدهد. لازم به ذکر است که فقط بلوک عملکرد async را منتظر می گذارد و نه کل اجرای برنامه را.
بلوک کد زیر استفاده از Async Await را با هم نشان می دهد.
مواردی که باید هنگام استفاده از Async Await به خاطر بسپارید
await
در توابع منظم استفاده کنیم.
برای اینکه عملکرد فوق به درستی کار کند ، باید async را قبل از تابع firstAsync(); اضافه کنیم.
Async Await اجرا را پی در پی می کند
لزوما چیز بدی نیست ، اما اجرای موازی بسیار سریعتر انجام می شود.
مثلا:
تکمیل موارد فوق 100 میلی ثانیه طول می کشد ، زمان زیادی نیست اما هنوز هم کند است.
این به این دلیل است که به ترتیب اتفاق می افتد. دو promise بازگردانده می شود که انجام هر دو 50 میلی ثانیه طول می کشد. Promise دوم فقط پس از حل Promise اول اجرا می شود. این روش خوبی نیست ، زیرا درخواست های بزرگ می تواند بسیار وقت گیر باشد. ما باید اعدام را موازی کنیم.
با استفاده از Promise.all() می توان به این مهم دست یافت.
به گفته MDN:
متد Promise.all() یک Promise واحد را برمی گرداند که وقتی همه promise های تصویب شده مانند یک مسئله قابل حل حل شده و یا اینکه هیچ Promise ای قابل قبول نیست ، حل می شود. با دلیل اولین Promise رد می کند.
Promise.all()
وقتی کلیه Promise های موجود قابل جمع شدن حل شده باشد ، تابع promise.all()
حل می شود و سپس نتیجه را برمی گرداند.
روش دیگر:
Async Await بسیار قدرتمند است اما با هشدارهای جدی همراه است. اما اگر از آنها به درستی استفاده کنیم ، آنها به خواندن و کارایی کد ما کمک می کنند.
برای ثبت نظر باید وارد سایت شوید یا ثبت نام نمایید.
نظر شما با موفقیت در سیستم ثبت گردید.